﻿namespace che7
{
    internal class Text4
    {
        static void Main(string[] args)
        {
            Console.WriteLine("类型转换-隐式转换");
            //类型转换：不同变量之间相互转换
            //隐式转换的基本规则：不同类型之间自动转换
            //大范围装小范围

 //1.相同大类型之间相互转化

            //有符号（long,int,short,sbyte,）
            long a = 1;
            int b = 1;
            short c = 1;
            sbyte d = 1;
            a = b;//long是九百万兆，int是21亿，小装大会报错
            //例：
            a = c;
            a = d;
            b = d;
            b = c;
            c = d;

            //无符号（ulong,uint,ushort,byte）
            ulong e = 1;
            uint f = 1;
            ushort g = 1;
            byte h = 1;
            //与上同理，大装小
            e = f;
            e = g;
            e = h;
            f = g;
            f = h;
            g = h;

            //浮点类型（float,double,decimal)
            decimal miku = 0.63m;
            float rin = 0.63f;
            double len = 0.63;
            //与上同理，但decimal不能用隐式转换的形式来存储float和double
            len = rin;

            //特殊类型（特殊类型之间不能转换，毕竟规则都不一样）

 //2.不同大类型之间相互转化

            //无符号装有符号
            //有符号的变量不能隐式转化为无符号的（不完全包含）

            //有符号装无符号
            b = g;//这个可以，因为ushort的范围被包含在int里
            //不是所有都可以，有符号的范围必须包含无符号的范围

            //浮点数和整型
            //相互之间存在隐式转换（相互装）
            len = g;
            rin = h;
            //decimal虽然不能装double和float但是可以装整型
            miku = a;
            //浮点数可以装载在任何整型（毕竟只对小数有限制）
            //但是整型不能隐式转换浮点数（毕竟整型没有小数）

            //特殊类型和其它类型之间
            //除了char以外其他都不能与浮点数和整型隐式转换（但不能隐式存储其他类型）
            //char隐式转换数值类型是对应数字，就是ASCII码（鹏哥那儿有讲）

            //作业
            //1.什么情况下会出现隐式转换，请举例说明
            //大范围存小范围
            //double-->float-->整型（有无符号）-->char
            //decimal-->整型（有无符号）-->char
            //long-->int-->short-->sbyte
            //ulong-->uint-->ushort-->byte
            //无符号没法隐式存储有符号的
            //有符号的可以存储无符号的（范围大小）
            char myLove1 = '初', myLove2 = '音', myLove3 = '未', myLove4 = '来';
            int o = myLove1, p = myLove2, q = myLove3, r = myLove4;
            Console.WriteLine(o);
            Console.WriteLine(p);
            Console.WriteLine(q);
            Console.WriteLine(r);
            //还有一种更简单的方法，但是我就这样写的
        }
    }
}
